package main

import "fmt"

// 指针相关
func pointer() {
	fmt.Println()
	fmt.Println("=========pointer========")
	fmt.Println()
	// 空指针
	a := 10
	var p *int
	// 报错
	//fmt.Println(p,*p)
	if p != nil {
		fmt.Println(p, *p)
	} else if p == nil {
		fmt.Println("nil")
	}
	// 指向a的地址
	p = &a
	fmt.Println(p, *p)

	// 指向数组的指针
	arr := []int{10, 100, 200}
	var ptr [3]*int
	for i := 0; i < 3; i++ {
		ptr[i] = &arr[i]
	}
	for i, pi := range ptr {
		i++
		fmt.Println(*pi)
	}

	// 指向指针的指针
	var ptr2 **int
	ptr2 = &p
	// p的地址，a的地址，a的值
	fmt.Println(ptr2, *ptr2, **ptr2)

}
